package com.ww.learn.innerclass

import java.lang.reflect.ParameterizedType
import java.lang.reflect.Type

open class GenericsToken<T> {
    var type: Type = Any::class.java

    init {
        val superClass = this.javaClass.genericSuperclass
        type = (superClass as ParameterizedType).actualTypeArguments[0]
    }
}

fun main() {
    // 匿名内部类在初始化的时候就会绑定父类或父接口的相应信息，这样就能通过获取父类或父接口的泛型信息来实现我们的需求
    val gt = object : GenericsToken<Map<String, String>>() {} // 使用object创建一个匿名内部类
    println(gt.type)
}